package com.mhb.generator;

import com.mhb.generator.config.*;
import com.mhb.generator.config.rules.DbType;
import com.mhb.generator.config.rules.NamingStrategy;
import com.mhb.generator.config.rules.TemplateType;
import com.mhb.generator.config.rules.UseViewType;

/**
 * @author 博博
 * @Title: TestGenerator
 * @time 2019/12/27 0027 9:06
 */
public class TestGenerator {

    public static void main(String[] args) {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig
                .setAuthor("博博") // 设置 作者
                .setGenerateMapper(true) // 是否生成mapper
                .setGenerateService(true) // 是否生成service impl
                .setGenerateBaseCRUD(true) // 是否生出基础curd语句
                .setGenerateBaseResultMap(true) // 是否生成基础resultMap
                .setGenerateTemplate(true) // 是否生成视图模板
                .setGenerateBaseColumnList(true) // 是否生成基础查询字段
                .setGenerateController(true) // 是否生成controller
                .setFilePath("E:\\IdeaProjects\\Generator\\src\\main\\java\\")// 生成路径
                .setMybatisPlus(true) // 是否生成mybatis plus代码
                .setPageMethod(true); // 是否生成分页方法 service 和 controller 方法


        // 数据库连接配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig
                // 数据库类型 目前支持MySQL，如有其它需要可以自己扩展。参考 com.mhb.generator.config.query.MySqlQuery
                .setDbType(DbType.MYSQL)
                // 驱动
                .setDriverName("com.mysql.jdbc.Driver")
                // url
                .setUrl("jdbc:mysql://localhost:3306/zhdj_wx")
                // 用户名
                .setUsername("root")
                // 密码
                .setPassword("root");

        // 包配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig
                // 设置父包 设置父包后，子包路径就是 com.mhb.generator.tester.pojo .....
                .setParent("com.mhb.generator.tester")
                // 实体包名
                .setEntity("pojo")
                // mapper
                .setMapper("mapper")
                // controller
                .setController("controller")
                // service
                .setService("service");

        String[] tables = {"t_role_user"};
        // 生成策略
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig
                // 生成模块 名称 %s 则是系统根据表生成的名称
                .setServiceName("%sService")
                .setServiceImplName("%sServiceImpl")
                .setMapperName("%sMapper")
                .setControllerName("%sController")
                // 字段输出方式，underline_to_camel 下划线转换驼峰，no_change 不做转换
                .setNamingStrategy(NamingStrategy.underline_to_camel)
                // 去除表前缀，生成的时候 如果指定了表前缀，例如：table ; we_user 生成的模块名就是 user，去除we_
                .setTablePrefix("t_")
                // 生成的表数组，
                .setTables(tables)
                // 是否使用lombok插件
                .setEntityLomBokModel(true)
                // 是否使用构建者模式
                .setEntityBuilderModel(true);

        // 视图配置
        ViewConfig viewConfig = new ViewConfig();
        viewConfig
                /*
                   是否懒生成 视图
                  （如果设置了懒 为 false 则生成controller 基础方法，但是不生成视图，需要手动再执行手动生成）
                  （如果设置了懒 为 true 生成controller 基础方法，但是生成视图，但是生成的视图则为全部参数都有的）
                 */
                .setLazyGenerate(true)
                // 使用生成的视图模板，目前只支持 ftl，如果有需要可以自己扩展
                .setUseViewType(UseViewType.FTL)
                // 模板文件是否把驼峰转换为下划线
                .setTemplateCamel(true)
                // 生成视图 名称 %s 则是系统根据表生成的名称
                .setSelectViewName("%s_select")
                .setUpdateViewName("%s_update")
                .setDetailViewName("%s_detail")
                .setSaveViewName("%s_save")
                // 生成模板类型，目前只支持jsp，如果有需要可以自己扩展。扩展容易，可以参考源码中的 view_detail_jsp.ftl....
                .setTemplateType(TemplateType.JSP)
                // 生成文件的路径
                .setTemplatePath("E:\\IdeaProjects\\Generator\\src\\main\\resources\\jsp\\")
                // controller return 返回的视图前缀
                .setPathPrefix("/sys/tester/");

        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setDataSourceConfig(dataSourceConfig)
                .setGlobalConfig(globalConfig)
                .setPackageConfig(packageConfig)
                .setStrategyConfig(strategyConfig)
                .setViewConfig(viewConfig);
        System.out.println();
        autoGenerator.execution();
    }

}
